﻿using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Microsoft.VisualStudio.Shell;

namespace Hmg.Tools.AssemblyReferences
{
    /// <summary>
    /// This class implements the tool window exposed by this package and hosts a user control.
    ///
    /// In Visual Studio tool windows are composed of a frame (implemented by the shell) and a pane, 
    /// usually implemented by the package implementer.
    ///
    /// This class derives from the ToolWindowPane class provided from the MPF in order to use its 
    /// implementation of the IVsUIElementPane interface.
    /// </summary>
    [Guid("f2d4a806-4b93-476c-a985-4af4d44493c8")]
    public class AssemblyReferenceToolWindow : ToolWindowPane
	{
		#region Fields

    	private readonly ToolWindowControl _toolWindowControl;

		#endregion

		/// <summary>
        /// Standard constructor for the tool window.
        /// </summary>
        public AssemblyReferenceToolWindow() :
            base(null)
        {
            // Set the window title reading it from the resources.
			Caption = "Assembly Reference Tool";
            // Set the image that will appear on the tab of the window frame
            // when docked with an other window
            // The resource ID correspond to the one defined in the resx file
            // while the Index is the offset in the bitmap strip. Each image in
            // the strip being 16x16.
            BitmapResourceID = 301;
            BitmapIndex = 1;

            // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable,
            // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on 
            // the object returned by the Content property.
            //base.Content = new MyControl();
            _toolWindowControl = new ToolWindowControl();
            _toolWindowControl.ParentToolWindow = this;
        }

        /// <summary>
        /// Gets the window.
        /// </summary>
        /// <value>The window.</value>
		override public IWin32Window Window
		{
			get
			{
			    return _toolWindowControl;
			}
		}

        /// <summary>
        /// Releases unmanaged and - optionally - managed resources
        /// </summary>
        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        protected override void Dispose(bool disposing)
        {
            if (_toolWindowControl != null)
            {
                _toolWindowControl.Dispose();
            }
            base.Dispose(disposing);
        }
	}
}
